package com.sesame.mapping;

import com.sesame.entity.SysUserPo;
import com.sesame.entity.UserVo;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

/**
 * @Mapper 定义这是一个MapStruct对象属性转换接口，在这个类里面规定转换规则
 * 在项目构建时，会自动生成改接口的实现类，这个实现类将实现对象属性值复制
 */
@Mapper
public interface UserMapper {
    /**
     * 获取该类自动生成的实现类的实例
     * 接口中的属性都是 public static final 的 方法都是public abstract的
     */
    UserMapper INSTANCES = Mappers.getMapper(UserMapper.class);

    /**
     * 这个方法就是用于实现对象属性复制的方法
     *
     * @param po 这个参数就是源对象，也就是需要被复制的对象
     * @return 返回的是目标对象，就是最终的结果对象
     * @Mapping 用来定义属性复制规则 source 指定源对象属性 target指定目标对象属性
     */
    @Mappings({
            @Mapping(source = "userId", target = "userId")
            , @Mapping(source = "username", target = "username")
            , @Mapping(source = "avatar", target = "avatar")
            , @Mapping(source = "sex", target = "sex")
            , @Mapping(source = "createTime", target = "createTime")
    })
    UserVo toUserVo(SysUserPo po);
}
